
function blank() {

}
//唤醒他人的方法
function call() {
	if(this.isShow===false){
		this.answer = [];
	}
	for(let i in this.calls){
		console.log(this.calls[i]);
		let question = this.calls[i];
		let temp = question.compute(this.type+"@"+this.id,this.answer,this.isShow);
		if(question.isShow!==temp){
			question.isShow = temp;
			question.call();
		}
	}
}
//计算选项是否满足条件
function remindFunc(ans) {
	console.log(ans);
	if(this.type==="radio"){
		//单选
		this.isShow=this.optionIds.has(ans[0]);
	}else{
		//多选
		let set = new Set([...ans]);
		if(this.isChoose){
			if(this.isAll){
				//选择全部
				let intersect = new Set([...set].filter(x => this.optionIds.has(x)));
				this.isShow=intersect.size>=this.optionIds.size;
			}else{
				//选择之一
				let intersect = new Set([...set].filter(x => this.optionIds.has(x)));
				this.isShow=intersect.size>=1;
			}
		}else{
			if(this.isAll){
				//不选全部
				let intersect = new Set([...set].filter(x => this.optionIds.has(x)));
				this.isShow=intersect.size<this.optionIds.size;
			}else{
				//不选之一
				let intersect = new Set([...set].filter(x => this.optionIds.has(x)));
				this.isShow=intersect.size===0;
			}
		}
	}
}
//计算题目关联是否满足条件
function compute(typid,ans,isShow) {
	
	//前一个关联题目的isShow，如果前面的关了，自己也必须关
	if(isShow===false){
		return false;
	}
	
	if(this.remind.length===0){
		return true;
	}
	//选项的cpmpute计算
	this.remind[typid].compute(ans);
	
	if(this.logic==="且"){
		//且关系
		for(let item in this.remind){
			if(this.remind[item].isShow === false){
				return  false;
			}
		}
		return  true;
	}else{
		//或关系
		for(let item in this.remind){
			if(this.remind[item].isShow===true){
				return  true;
			}
		}
		return  false;
	}
}
//添加关联对象
function optionRemind(arr,relationQuestion){
	let obj = {
		optionIds:new Set(),
		compute: remindFunc,
		type: "radio",
		isShow: false,
		relationQuestion: relationQuestion
	};
	if(arr[0]===true||arr[0]===false){
		//多选
		obj.isChoose = arr[0];
		obj.isAll = arr[1];
		obj.type = "checkbox";
		let array = arr.slice(2)
		for(let a in array){
			obj.optionIds.add(array[a]);
		}
	}else{
		//单选
		for(let a in arr){
			obj.optionIds.add(arr[a]);
		}
	}
	
	return obj;
}
//初始化
function initQRelation(questions,relationMap){
	//题目对象map
	let map={};
	questions.forEach(question=>{
		//该题需要提醒的题目
		question.call = call;
		question.calls=[];
		map[question.type+"@"+question.id] = question;
	});
	for( let typeid in relationMap){
		//props是属性
		let props = relationMap[typeid];
		//question是自己
		let question = map[typeid];
		question.compute = compute;
		//自己的提醒对象
		question.remind = {};
		for(let ti in props){
			//当中的logic是且或
			if(ti==="logic")continue;
			//ti是别人
			//将自己推入别人的提醒列表中
			map[ti].calls.push(question);
			//生成自己的提醒对象
			question.remind[ti]=optionRemind(props[ti],map[ti])
		}
	}
}

export {initQRelation}

//TODO  初始化关联关系
// let caller = res.data.data.relations.caller;
// let relationMap = res.data.data.relations.relationMap;
// let questions = res.data.data.questions;
// if(Object.keys(caller).length>0){
// 	initQRelation(res.data.data.questions,relationMap);
// 	//计算关联
// 	if(questions.length!==0){
// 		let question = questions[0];
// 		question.isShow=true;
// 		//初始唤醒
// 		question.call();
// 	}
// }

// relationMap={
// 	type@id: {
// 		logic: or/and
// 		type@id: [] 多选则前两个是isChoose和isAll，单选则是optionId
// 		type@id: [] 多选则前两个是isChoose和isAll，单选则是optionId
//      },
// 	type@id: {
// 		logic: or/and
// 		type@id: [] 多选则前两个是isChoose和isAll，单选则是optionId
// 		type@id: [] 多选则前两个是isChoose和isAll，单选则是optionId
// 	}
// }

// question：{
// 	calls: [question],
// 	remind:{
// 		type@id:{
// 			isChoose,
// 			isAll,
// 			isShow
// 			type
// 			optionIds:[]
// 			relationQuestion:
//          compute:()
// 		}
// 	}
// }
